/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package camada.bancodedados.daoimplemente.material;

import eloma.classe.Cliente;
import eloma.classe.material.Material;
import camada.bancodedados.conexao.Conexao;
import com.mysql.jdbc.PreparedStatement;
import eloma.classe.material.TipoMaterial;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JOptionPane;

/**
 *
 * @author Icaro
 */
public class MaterialDAOImpl {

    TipoMaterialDAOImpl daoTipoMaterial = new TipoMaterialDAOImpl();

//     public void inserir(Cliente cliente) {
//        PreparedStatement pstm = null;
//        try {
//            final String SQL_INSERT =
//                   "insert into cliente(nome,datanascimento,cpf,rg,telefone,telefonefax,celular,endereco," +
//                   " numero,complemento,cep,bairro,cidade,uf)values(?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
//            pstm = Conexao.getCon().prepareStatement(SQL_INSERT);
//            pstm.setString(1, cliente.getNome());
//            pstm.setString(2, cliente.getDataNascimento());
//            pstm.setString(3, cliente.getCpf());
//            pstm.setString(4, cliente.getRg());
//            pstm.setString(5, cliente.getTelefone());
//            pstm.setString(6, cliente.getTelefoneFax());
//            pstm.setString(7, cliente.getCelular());
//            pstm.setString(8, cliente.getEndereco());
//            pstm.setString(9, cliente.getNumero());
//            pstm.setString(10, cliente.getComplemento());
//            pstm.setString(11, cliente.getCep());
//            pstm.setString(12, cliente.getBairro());
//            pstm.setString(13, cliente.getCidade());
//            pstm.setString(14, cliente.getUf());
//            pstm.executeUpdate();
//            JOptionPane.showMessageDialog(null, "O Cliente " + cliente.getNome() + ", foi cadastrado com sucesso!");
//        } catch (SQLException e) {
//            System.out.println("Erro ao inserir dados!!!\n" + e.getMessage());
//        }
//    }
//    public void atualizar(Cliente cliente) {
//        PreparedStatement pstm = null;
//        try {
//            final String SQL_UPDATE =
//                    "UPDATE Material SET nome = ? ,datanascimento = ?, cpf = ?, rg = ?, telefone = ?,"
//                    + "telefonefax = ?, celular = ?, endereco = ?, numero = ?, complemento = ?, cep = ?,bairro, " +
//                    "cidade = ?, uf = ?  WHERE idcliente = ?";
//            pstm = (PreparedStatement) Conexao.getCon().prepareStatement(SQL_UPDATE);
//            pstm.setString(1, cliente.getNome());
//            pstm.setString(2, cliente.getDataNascimento());
//            pstm.setString(3, cliente.getCpf());
//            pstm.setString(4, cliente.getRg());
//            pstm.executeUpdate();
//            JOptionPane.showMessageDialog(null, "Atualização realizada com sucesso!");
//        } catch (SQLException e) {
//            System.out.println("Erro ao atualizar dados!!!\n" + e.getMessage());
//        }
//    }
    public Material getMaterialPorNome(String nomeMaterial) throws Exception {
        PreparedStatement stmt = null;
        ResultSet rs = null;
        try {
            final String SQL_PESQUISA_USUARIO = "select * from Material where nomematerial = ?";
            stmt = (PreparedStatement) Conexao.getCon().prepareStatement(SQL_PESQUISA_USUARIO);
            stmt.setString(1, nomeMaterial);
            rs = stmt.executeQuery();
            return carregarResultadoSimples(rs);
        } catch (SQLException sqle) {
            throw new Exception(sqle);
        } catch (Exception e) {
            throw new Exception(e);
        } finally {
        }
    }

    public void remover(Material material) {
        PreparedStatement pstm = null;
        try {
            final String SQL_DELETE = "delete from Material where idmaterial = ?";
            pstm = (PreparedStatement) Conexao.getCon().prepareStatement(SQL_DELETE);
            pstm.setInt(1, material.getIdMaterial());
            pstm.executeUpdate();
            // JOptionPane.showMessageDialog(null, "O usuário " + material.getNomeMaterial() + " foi removido com sucesso!");
        } catch (SQLException e) {
            System.out.println("Erro ao inserir dados!!!\n" + e.getMessage());
        }

    }

    public List<Material> pesquisarTodosMaterial() throws Exception {
        PreparedStatement stmt = null;
        ResultSet rs = null;
        String SQL_STATEMENT = "Select * from Material order by material";
        try {
            stmt = (PreparedStatement) Conexao.getCon().prepareStatement(SQL_STATEMENT);
            rs = stmt.executeQuery();
            return carregarMultiplosResultados(rs);
        } catch (SQLException sqle) {
            throw new Exception(sqle);
        } catch (Exception e) {
            throw new Exception(e);
        } finally {
        }
    }

    public List<Material> carregarMultiplosResultados(ResultSet rs) throws SQLException {
        List<Material> resultList = new ArrayList<Material>();
        while (rs.next()) {
            Material dto = new Material();
            carregarVO(dto, rs);
            resultList.add(dto);
        }
        return resultList;
    }

    private Material carregarResultadoSimples(ResultSet rs) throws SQLException {
        if (rs.next()) {
            Material dto = new Material();
            carregarVO(dto, rs);
            return dto;
        } else {
            return null;
        }
    }

    private void carregarVO(Material dto, ResultSet rs) throws SQLException {
        try {
            dto.setIdMaterial(rs.getInt("idMaterial"));
            dto.setMaterial(rs.getString("material"));
            dto.setPesoMetro(rs.getFloat("pesoMetro"));

            dto.setImageURL(rs.getString("imagenUrl"));

            TipoMaterial tipoMaterial = daoTipoMaterial.pesquisarMaterialPorIdentificador(rs.getInt("idTipoMaterial"));
            dto.setTipoMaterial(tipoMaterial);
        } catch (Exception e) {
        }
    }

}
